import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# 初始化tushare接口，将下面的your_token替换为你在tushare官网申请到的token
ts.set_token('d83f64de015f15f0fa72d6dca1d7285304f223098b1bf05ce97797e0')
pro = ts.pro_api()

# 获取国债收益率数据，设置起始时间为2014-01-01，这里假设数据中相应字段名为'ten_year_yield'（十年国债收益率）和'three_month_yield'（三个月国债收益率），你可根据实际调整
# df = pro.bond_zh_yield(start_date='2014-01-01')

# 获取中债十年国债收益率曲线数据，设置起始时间为2024年1月1日
df = pro.bond_zh_yield(start_date='2024-01-1', end_date='2024-12-3')

# 提取中债十年国债收益率曲线数据，假设数据中相应字段名为'ten_year_yield'，你可根据实际调整
ten_year_yield_data = df['ten_year_yield']

print(ten_year_yield_data)


# 数据处理，提取十年国债收益率和三个月国债收益率列，并计算利差
ten_year_yield = df['ten_year_yield']
three_month_yield = df['three_month_yield']
yield_spread = ten_year_yield - three_month_yield

# 将日期列转换为日期时间格式，便于后续绘图时日期的展示
df['date'] = pd.to_datetime(df['date'])

# 创建图形和第一个坐标轴对象
fig, ax1 = plt.subplots(figsize=(10, 6))

# 绘制十年国债收益率曲线（红色）
color_red = 'r'
ax1.plot(df['date'], ten_year_yield, color=color_red, label='十年国债收益率')
ax1.set_xlabel('时间')
ax1.set_ylabel('十年国债收益率', color=color_red)
ax1.tick_params(axis='y', labelcolor=color_red)

# 格式化x轴日期显示格式，使其更美观
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))

# 创建第二个坐标轴对象（共享x轴）
ax2 = ax1.twinx()

# 绘制利差曲线（蓝色）
color_blue = 'b'
ax2.plot(df['date'], yield_spread, color=color_blue, label='十年国债与三个月国债收益率利差')
ax2.set_ylabel('利差', color=color_blue)
ax2.tick_params(axis='y', labelcolor=color_blue)

# 添加图例
lines_1, labels_1 = ax1.get_legend_handles_labels()
lines_2, labels_2 = ax2.get_legend_handles_labels()
ax2.legend(lines_1 + lines_2, labels_1 + labels_2, loc='upper left')

# 自动调整x轴日期标签的显示角度等，避免重叠
fig.autofmt_xdate()

# 显示图形
plt.show()